#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>

// //捕捉SIGCHID的自定义动作
// void handler(int signo)
// {
//     printf("捕捉到%d信号,父进程的pid:%d\n", signo, getpid());
//     sleep(3);
//     while (1)
//     {
//         // 等待随机进程退出，阻塞式等待
//         pid_t n = waitpid(-1, nullptr, 0);
//         if (n > 0)
//         {
//             printf("等待%d号子进程退出成功\n", n);
//         }
//         else
//         {
//             // 没有进程可以等待
//             break;
//         }
//     }

//     printf("捕捉信号完成\n");
// }

// int main()
// {
//     //对SIGCHID信号捕捉
//     signal(SIGCHLD, handler);
//     //创建4个子进程，其中两个会退出，两个不会退出
//     for (int i = 0; i < 4; i++)
//     {
//         pid_t id = fork();

//         if (id == 0)
//         {
//             // 子进程
//             int cnt = 3;
//             //一半的子进程会退出
//             if (i % 2 == 0)
//             {
//                 printf("我是会退出的%d号子进程,我的pid:%d,ppid:%d\n", i,getpid(), getppid());
//                 //3秒以后退出
//                 while (cnt--)
//                 {
//                     printf("%d号进程:%d\n",i,cnt);
//                     sleep(1);
//                 }
//             }
//             else
//             {
//                 printf("我是不会退出的%d号子进程,我的pid:%d,ppid:%d\n", i,getpid(), getppid());
//                 while(1)
//                 {
//                     sleep(1);
//                 }
//             }
            
//             printf("%d号进程退出\n",i);
//             exit(1);
//         }
//     }

//     //父进程进行死循环
//     while (1)
//     {   sleep(1);
//         printf("我是父进程，我现在很闲\n");
//     }

//     return 0;
// }
volatile int quit=0;

void handler(int signo)
{
    printf("quit from 0 to 1\n");
    quit=1;
    printf("quit:%d\n",quit);
}

int main()
{
    signal(SIGINT,handler);

    while(!quit);

    printf("程序运行结束\n");

    return 0;
}